﻿#include "ElementDelegate.h"
#include <qapplication.h>

void ElementDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if (!index.isValid())
        return;
    painter->save();
    paintBackground(painter,option,index);
    paintIcon(painter,option,index);
    paintText(painter,option,index);
    // 恢复之前的状态
    painter->restore();
}

QSize ElementDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {
    // 根据需要计算大小
    QSize originalSize = QStyledItemDelegate::sizeHint(option, index);
    originalSize.setHeight(20); // 例如，设置固定高度为20
    return originalSize;
}

void ElementDelegate::paintBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    // 设置新的背景色
    QColor backgroundColor;
    if (index.isValid()) {
        // 这里可以根据索引或其他条件来决定背景色
        // 例如，如果行号是偶数，则设置为蓝色；否则设置为红色
        QVariant v = index.data(Qt::BackgroundRole);
        if(!v.isNull()){
            backgroundColor = QColor(v.toString());
            // 使用QPainter绘制背景
            painter->fillRect(option.rect, backgroundColor);
            painter->drawRect(option.rect);
        }
    }
}
#include <QFontMetrics>
void ElementDelegate::paintText(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    // 这里可以根据index获取数据，并使用painter进行绘制
    QString text = index.model()->data(index, Qt::DisplayRole).toString();
    // 设置字体样式等
    painter->setFont(mFont);
    // 计算文本的位置
    QRect textRect = QFontMetrics(mFont).boundingRect(option.rect, Qt::AlignLeft | Qt::AlignVCenter, text);
    textRect.moveLeft(option.rect.left() + iconSize.width() + 10); // 在图标右侧留出一些空间
    // 绘制文本
    painter->drawText(textRect, Qt::AlignLeft, text);
}

void ElementDelegate::paintIcon(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    // 这里可以根据index获取数据，并使用painter进行绘制
    QString iconFile = index.model()->data(index, Qt::DecorationRole).toString();
    if(iconFile.isEmpty())
    {
        iconSize.setWidth(0);
        iconSize.setHeight(0);
        return;
    }else{
        iconSize.setWidth(16);
        iconSize.setHeight(16);
    }
    // 获取你的图标，这里假设它是从模型中获取的某种方式
    // 例如，你可能有一个角色专门用来存储图标的路径或QIcon对象本身
    QIcon icon(iconFile);

    // 计算图标的位置
    QRect iconRect = QRect(option.rect.left() + 5,
                           option.rect.top() + (option.rect.height() - icon.actualSize(iconSize).height()) / 2,
                           icon.actualSize(iconSize).width(),
                           icon.actualSize(iconSize).height());
    // 绘制图标
    icon.paint(painter, iconRect);
}
